package com.example.hetong_system.util;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

/**
 * AES可逆加密工具类（用于密码加密存储）
 * 注意：实际生产环境需将密钥存入配置文件，避免硬编码
 */
public class AesEncryptUtil {

    // 密钥（AES要求密钥长度为16/24/32字节，这里使用16字节）
    private static final String KEY = "HetongSystem123"; // 自定义密钥（需妥善保管）

    // 加密算法
    private static final String ALGORITHM = "AES";

    /**
     * 加密方法
     * @param content 待加密内容（明文密码）
     * @return 加密后的Base64字符串
     */
    public static String encrypt(String content) {
        try {
            // 创建AES密钥
            SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
            // 创建加密器（AES/ECB/PKCS5Padding模式）
            Cipher cipher = Cipher.getInstance(ALGORITHM + "/ECB/PKCS5Padding");
            // 初始化加密模式
            cipher.init(Cipher.ENCRYPT_MODE, keySpec);
            // 加密并转为Base64（方便存储）
            byte[] encrypted = cipher.doFinal(content.getBytes());
            return Base64.getEncoder().encodeToString(encrypted);
        } catch (Exception e) {
            throw new RuntimeException("密码加密失败：" + e.getMessage());
        }
    }

    /**
     * 解密方法
     * @param encryptedContent 加密后的Base64字符串
     * @return 解密后的明文
     */
    public static String decrypt(String encryptedContent) {
        try {
            // 创建AES密钥
            SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM);
            // 创建解密器
            Cipher cipher = Cipher.getInstance(ALGORITHM + "/ECB/PKCS5Padding");
            // 初始化解密模式
            cipher.init(Cipher.DECRYPT_MODE, keySpec);
            // Base64解码后解密
            byte[] decoded = Base64.getDecoder().decode(encryptedContent);
            byte[] decrypted = cipher.doFinal(decoded);
            return new String(decrypted);
        } catch (Exception e) {
            throw new RuntimeException("密码解密失败：" + e.getMessage());
        }
    }

}